package cn.jtfadmin.core.modules.sys.controller;



import cn.jtfadmin.base.lang.common.domain.dto.AntdvTreeDataRDTO;
import cn.jtfadmin.base.lang.common.domain.dto.ResultDTO;
import cn.jtfadmin.base.lang.common.domain.dto.SpecPDTO;
import cn.jtfadmin.base.lang.common.domain.dto.TreeRDTO;
import cn.jtfadmin.base.lang.common.service.BaseTreeService;
import cn.jtfadmin.core.modules.sys.domain.dto.SysPermissionAddPDTO;
import cn.jtfadmin.core.modules.sys.domain.dto.SysPermissionEditPDTO;
import cn.jtfadmin.core.modules.sys.domain.dto.SysPermissionModelDTO;
import cn.jtfadmin.core.modules.sys.domain.entity.SysPermissionEntity;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.constraints.NotBlank;
import java.util.List;

/**
 * 后管-系统菜单权限表
 */
@RestController
@AllArgsConstructor
@Validated
public class SysPermissionController {

    private BaseTreeService<SysPermissionEntity> service;

    /**
     * 查询<p>
     * 菜单权限表
     * </p>树
     *
     * @return 返回树结构
     */
    @GetMapping(value = "/sys/permission/list")
    public ResultDTO<List<TreeRDTO<SysPermissionModelDTO>>> list(SpecPDTO<SysPermissionEntity> specPDTO) {
        return ResultDTO.successData(service.findTree(specPDTO, SysPermissionModelDTO.class));
    }


    /**
     * 新增<p>
     * 菜单权限表
     * </p>
     *
     * @param addPDTO 增增参数
     * @return 无
     */
    @RequestMapping(value = "/sys/permission/add", method = RequestMethod.POST)
    public ResultDTO<String> add(@RequestBody @Validated SysPermissionAddPDTO addPDTO) {
        return ResultDTO.successData(service.add(addPDTO).getId());
    }

    /**
     * 修改 <p>
     * 菜单权限表
     * </p>
     *
     * @param editPDTO 修改参数
     * @return 无
     */
    @PutMapping(value = "/sys/permission/edit")
    public ResultDTO<String> edit(@RequestBody @Validated SysPermissionEditPDTO editPDTO) {
        return ResultDTO.successData(service.edit(editPDTO).getId());
    }


    /**
     * 按照id删除 <p>
     * 菜单权限表
     * </p>
     *
     * @param id id
     * @return 无
     */
    @DeleteMapping(value = "/sys/permission/del")
    public ResultDTO<String> del(@RequestParam() @NotBlank String id) {
        service.deleteById(id);
        return ResultDTO.success();
    }

    /**
     * 批量删除 <p>
     * 菜单权限表
     * </p>
     *
     * @param ids 查询条件
     * @return 分页数据
     */
    @DeleteMapping(value = "/sys/permission/delBatch")
    public ResultDTO<String> delBatch(@RequestParam() @NotBlank String ids) {
        service.deleteBatch(ids);
        return ResultDTO.success();
    }

    /**
     * 查询antdTree
     *
     * @param columns 命名列
     * @return 无
     */
    @GetMapping(value = "/sys/permission/tree")
    public ResultDTO<List<AntdvTreeDataRDTO>> findAntdvTreeDataRDTO(String columns) {
        return ResultDTO.successData(service.findAntdTree(columns));
    }


}
